
const fs = require('fs');

/**
 * 规则服务器，按照 whistle 官方文档规范实现
 * 这个函数会被 whistle 调用，用于获取插件提供的规则
 * 
 * @param {Object} server - whistle 提供的 server 对象
 * @param {Object} options - whistle 提供的配置对象
 */
module.exports = (server, options) => {
  console.log('[NoHost] 初始化 Rules Server (实时同步模式)');
  
  try {
    // 注册请求处理函数
    server.on('request', async (req, res) => {
      try {
        console.log('[NoHost] RulesServer 收到规则请求 - 实时获取最新状态');
        
        // 实时生成当前激活环境的规则
        const rules = await generateActiveRules();
        
        console.log('[NoHost] 实时生成的规则:', rules);
        
        // 设置内容类型
        res.setHeader('Content-Type', 'text/plain; charset=utf-8');
        
        // 返回规则文本 - whistle 会解析这些规则并应用
        res.end(rules);
        
      } catch (error) {
        console.error('[NoHost] RulesServer 错误:', error);
        res.statusCode = 500;
        res.end('# NoHost Rules Server Error\n');
      }
    });
  } catch (error) {
    console.error('[NoHost] RulesServer 初始化失败:', error);
  }
};

/**
 * 生成当前激活环境的所有规则
 * 优化版：直接读取rules.txt文件
 */
async function generateActiveRules() {
  try {
    // 直接读取rules.txt文件
    const rulesFilePath = path.join(__dirname, '../rules.txt');
    
    if (fs.existsSync(rulesFilePath)) {
      const rulesContent = fs.readFileSync(rulesFilePath, 'utf8');
      return rulesContent;
    } else {
      // 如果文件不存在，返回默认规则
      return '# NoHost Plugin Rules\n# No active environments\n';
    }
  } catch (error) {
    console.error('[NoHost] 读取rules.txt失败:', error);
    return '# NoHost Plugin Rules\n# Error: ' + error.message;
  }
}


